package com.briup.day12;

import com.briup.day06.Student;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

/**
 * @author lining
 * @date 2024/1/23 9:35
 */
public class TestArrayList {
    public void method(){
        //1.List List是一种有序集合（放入 取出的顺序一致）
        List<String> list = new ArrayList<>();
        //2.添加元素
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        //List集合可以存放重复元素(对象重复 equals hashcode)
        list.add("a");
        //存储null元素
        list.add(null);
        list.add("x");

        //3.使用for获取元素get(index)
        for (int i = 0; i < list.size(); i++) {
            //每个元素都是通过下标值获取
            System.out.println("集合元素："+list.get(i));
        }
    }
    public void method2(){
        //1.通过内存图的方式表示以下代码
        //ArrayList本质上就是使用数组实现的元素存储
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        System.out.println(list);//打印toString 元素信息
        System.out.println(list.size());
        System.out.println(list.isEmpty());//false 判断是否为空
        //删除元素:如何实现删除？通过数组的复制操作，将被删除的元素进行覆盖，达到删除的效果
        list.remove(2);//删除c
        list.remove("a");
        System.out.println(list);
        // 1000  删除第二个学生 998-->移动
        list.clear();//清空数组 每个元素=null
        list.contains("b");//判断是否包含

    }
    //遍历集合
    public void method3(List<String> list){
        //1.for循环: 删除元素  如果我创建对象Arrays.asList()...提示 java.lang.UnsupportedOperationException
        for (int i = 0; i < list.size(); i++) {
            //可以对集合中元素做任何操作 :删除操作
            String msg = list.get(i);//msg=null
            if ("b".equals(msg)){
                //打印被删除的元素
                System.out.println("被删除的元素："+msg);
                //注意：通过下标值删除，元素移动。删除出现失败。打印错误
                list.remove(i);
            }
            System.out.println("i每个元素："+msg);
        }
    }
    public void method4(List<String> list){
        //2.增强for操作（迭代） 是否可以直接获取元素 不通过下标值
        for(String n : list){
            if ("b".equals(n)){
//          不能进行删除操作      ConcurrentModificationException
                list.remove(n);
            }
            System.out.println("n每个元素："+n);
        }
    }
    public void method5(List<String> list){
        //3.迭代器遍历
        //1.获取一个集合的迭代器对象
        Iterator<String> iterator = list.iterator();
        while(iterator.hasNext()){
            String s = iterator.next();
            if("b".equals(s)){
                //使用迭代器进行删除操作
                iterator.remove();//实现删除元素
//                list.remove(s);ConcurrentModificationException
            }
            System.out.println("s每个元素："+s);
        }
    }
    public void method6(int[] nums){
        for (int n : nums){
            System.out.println(n);//n=arr[0] n= arr[1]
            n = 0;
        }
        System.out.println(Arrays.toString(nums));//输出数组元素 1 2 3 4 0,0,0,0
    }

    public void method7(){
        //运行错误： 非法参数异常：IllegalArgumentException
        //1.创建一个集合对象保存班级60个同学的信息
        ArrayList<Student> list = new ArrayList<>(60);
        //数组的不断扩容实现保存60个学生
        list.add(new Student());
        list.add(new Student());
        list.add(new Student());
        list.add(new Student());
        list.add(new Student());
        //添加学生61 90= 60+30


    }


    public static void main(String[] args) {
        TestArrayList t = new TestArrayList();
        //提供List接口的实现类对象
//        List<String> list = Arrays.asList("a", "b", "c", "d");
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("b");
        list.add("c");
        list.add("d");
//        t.method5(list);
//        System.out.println(list);
        //总结： 3种遍历 写法：最简单 增强for
         //  遍历 进行删除 ： 选 迭代器进行
        int[] arr = {1,2,3,4};
        t.method6(arr);

    }
}
